#ifndef __JDY_25M_H__
#define __JDY_25M_H__

#include "main.h"
#include "koroCard.h"

#define JDY25M_DEVTYPE_ROUTE    "0"     // 路由
#define JDY25M_DEVTYPE_END      "1"     // 终端，无中继功能

/*
    0XFFFF              广播地址    设备短地址不能配置成 0XFFFF
    0X0002 到 0XFF00    单播地址    设备地址（用户设置短地址可在这个范围内）
    0X0001              中心机地址  中心机
    0xFF01 到 0XFFFE    系统地址    一般不建议使用
*/
#define JDY25M_BROAD_ADDR             0xFFFF

typedef enum {
    JDY25M_MESH_CMD_NOACK             = 0x00,    // 向目标设备发数据无应答
    JDY25M_MESH_CMD_ACK               = 0x01,    // 向目标设备发数据有应答
    JDY25M_MESH_CMD_IO_NOACK          = 0x10,    // 控制目标设备IO无应答
    JDY25M_MESH_CMD_IO_ACK            = 0x11,    // 控制目标设备IO有应答
    JDY25M_MESH_CMD_READ_ACK          = 0x31,    // 读目标设备参数
    JDY25M_MESH_CMD_CONFIG_ACK        = 0x41,    // 向目标设备发配置参数（NETID、MADDR、PIN、KEY、TYEP）
    JDY25M_MESH_CMD_FRIEND1_DATA_ACK  = 0xA1,    // 向所有朋友一对一发数据
    JDY25M_MESH_CMD_FRIEND2_DATA_ACK  = 0xA2,    // 只向私密朋友一对一发数据
}JDY25M_MESH_CMD_E;

#define JDY25M_SELF_MESH_NET_ID         KORO_MESH_NET_ID
#define JDY25M_SELF_MESH_ADDR           KORO_MESH_STAFF_ADDR
#define JDY25M_SELF_MESH_DEVTYPE        KORO_MESH_STAFF_DEVTYPE
#define JDY25M_SELF_MESH_NAME           KORO_MESH_STAFF_NAME

struct jdy25mStu {
    UART_HandleTypeDef *huart;

    // GPIO_TypeDef* rstPort;
    // uint16_t rstPin;
    
    GPIO_TypeDef* statPort;
    uint16_t statPin;
    
    GPIO_TypeDef* pwrcPort;
    uint16_t pwrcPin;
};

uint8_t jdy25m_init(struct jdy25mStu *jdy);
void jdy25m_mesh_send(struct jdy25mStu *jdy, uint16_t recvMADDR, uint8_t *data, uint8_t size, JDY25M_MESH_CMD_E cmd);

#endif
